From dc3b240c20d791cba706090e6c150893910e6112 Mon Sep 17 00:00:00 2001 From: Emmanuele Bassi Date: Tue, 5 Jul 2016 11:58:44 +0100 Subject: [PATCH] Ensure that render nodes are translated The clip rectangle may have non-zero offsets, so we need to ensure that the GskRenderNode associated to the rendered area is translated by those same offsets. --- gtk/gtkwidget.c | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/gtk/gtkwidget.c b/gtk/gtkwidget.c index b16cf8bc6d..39c8910bd2 100644 --- a/gtk/gtkwidget.c +++ b/gtk/gtkwidget.c @@ -15845,19 +15845,23 @@ gtk_widget_get_render_node (GtkWidget *widget, { GtkWidgetClass *klass = GTK_WIDGET_GET_CLASS (widget); GskRenderNode *node; + graphene_matrix_t m; + graphene_point3d_t tmp; + graphene_rect_t bounds; + GtkAllocation clip; + + gtk_widget_get_clip (widget, &clip); + graphene_rect_init (&bounds, 0, 0, clip.width, clip.height); + graphene_matrix_init_translate (&m, graphene_point3d_init (&tmp, clip.x, clip.y, 0.f)); if (klass->get_render_node == NULL) { GskRenderNode *tmp; - graphene_rect_t bounds; - GtkAllocation clip; cairo_t *cr; - gtk_widget_get_clip (widget, &clip); - graphene_rect_init (&bounds, clip.x, clip.y, clip.width, clip.height); - tmp = gsk_render_node_new (); gsk_render_node_set_bounds (tmp, &bounds); + gsk_render_node_set_transform (tmp, &m); cr = gsk_render_node_get_draw_context (tmp); gtk_widget_draw (widget, cr); @@ -15874,16 +15878,12 @@ gtk_widget_get_render_node (GtkWidget *widget, g_signal_has_handler_pending (widget, widget_signals[DRAW], 0, FALSE)) { GskRenderNode *tmp; - graphene_rect_t bounds; - GtkAllocation clip; gboolean result; cairo_t *cr; - gtk_widget_get_clip (widget, &clip); - graphene_rect_init (&bounds, clip.x, clip.y, clip.width, clip.height); - tmp = gsk_render_node_new (); gsk_render_node_set_bounds (tmp, &bounds); + gsk_render_node_set_transform (tmp, &m); cr = gsk_render_node_get_draw_context (tmp); if (g_signal_has_handler_pending (widget, widget_signals[DRAW], 0, FALSE)) -- 2.30.2